package com.zjsru.plan2025.oneday;

import java.util.Arrays;
import java.util.List;

/**
 * 1656. 设计有序流
 *
 * @Author: cookLee
 * @Date: 2025-02-24
 */
public class OrderedStream {

    private String[] strs;
    private int ptr = 1;


    /**
     * 有序流
     * \
     * OrderedStream(int n) 构造一个能接收 n 个值的流，并将当前指针 ptr 设为 1 。
     * String[] insert(int id, String value) 向流中存储新的 (id, value) 对。存储后：
     * 如果流存储有 id = ptr 的 (id, value) 对，则找出从 id = ptr 开始的 最长 id 连续递增序列 ，并 按顺序 返回与这些 id 关联的值的列表。然后，将 ptr 更新为最后那个  id + 1 。
     * \
     * 输入
     * ["OrderedStream", "insert", "insert", "insert", "insert", "insert"]
     * [[5], [3, "ccccc"], [1, "aaaaa"], [2, "bbbbb"], [5, "eeeee"], [4, "ddddd"]]
     * 输出
     * [null, [], ["aaaaa"], ["bbbbb", "ccccc"], [], ["ddddd", "eeeee"]]
     * \
     * 解释
     * OrderedStream os= new OrderedStream(5);
     * os.insert(3, "ccccc"); // 插入 (3, "ccccc")，返回 []
     * os.insert(1, "aaaaa"); // 插入 (1, "aaaaa")，返回 ["aaaaa"]
     * os.insert(2, "bbbbb"); // 插入 (2, "bbbbb")，返回 ["bbbbb", "ccccc"]
     * os.insert(5, "eeeee"); // 插入 (5, "eeeee")，返回 []
     * os.insert(4, "ddddd"); // 插入 (4, "ddddd")，返回 ["ddddd", "eeeee"]
     * \
     *
     * @param n n
     */
    public OrderedStream(int n) {
        this.strs = new String[n + 1];
    }

    public List<String> insert(int idKey, String value) {
        //赋值
        this.strs[idKey] = value;
        //开始指向的指针
        int start = this.ptr;
        while (this.ptr < this.strs.length && this.strs[this.ptr] != null) {
            this.ptr++;
        }
        //截取连续的数组
        return Arrays.asList(this.strs).subList(start, this.ptr);
    }

}
